/**
牛的聚会
Time Limit: 2000MS Memory Limit: 65536K
有n个农场，编号1~n，每个农场住着一头牛，农场间有m条路。现在要在p号农场办party，每个农场的牛都要去参加，参加完后还要返回。所有的牛在去和回来的时候都会选择最短的路，现在问，在所有的牛中，往返走的路最多的牛走过的路程是多少。（注意路径是单向的所以去和回来的路可能不同）
输入数据：
第1行：n m x
接下来m行，每行三个数u v w 表示从u号农场到v号农场间路程为w（单向路）
输出
往返走的路最多的牛走过的路程。
Sample Input
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1	
2 3 5
3 1 2
3 4 4
4 2 3
Sample Output
10

**/
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1005;
int d[maxn][maxn],n,m,p,inf=0x7ffffff;

int main(){
	cin>>n>>m>>p;
	int a,b,c;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j) continue;
			d[i][j]=inf;
		}
	}
	
	
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		d[a][b]=c;
	}
	
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
			}
		}
	}
	
	int ans = 0;
	for(int i=1;i<=n;i++){
			ans=max(ans,d[i][p]+d[p][i]);
	}
	cout<<ans<<endl;
}